All digital cameras suffer from lens and CCD effects that degrade image quality. For example, lens vignetting (the property of all lenses to gather more light in the center of the image) causes darkening of the corners of the image when compared with the image center. Another degradation is color shading, which is a gradual shift in color from one edge of the image to another. Color shading is easiest to see when the scene to be captured is a solid color (e.g. a clear blue sky or a blank wall). Color shading is the result of an interaction between the lens and CCD and is present in all digital cameras to varying degrees. A third type of degradation are lens blemishes which are caused by irregular lens surfaces. These irregularities are most visible when the lens is at full telephoto and smallest aperture (similar to the effect of dust on the lens).
Good quality digital cameras utilize a calibration and post-capture image processing algorithm to reduce or remove unwanted lens and CCD effects. A camera is calibrated by capturing an image of a uniformly illuminated, uniform-color scene (e.g. a white wall). Since the scene is known to be of uniform brightness and color, gains can be determined for each pixel location (r,c) to ensure the final image has uniform brightness and color. These gains may be represented by a matrix G with R rows and C columns. Because lens and CCD distortion changes with zoom and aperture position, a gain image Gaz needs to be stored for each aperture a ε{1 . . . A} and zoom position zε{1 . . . Z}. Unfortunately, there can be 100 or more such gain images for all zoom and aperture settings. The key is to utilize a method that can be computed quickly with minimum on-camera memory use while still accurately correcting lens and CCD effects.
The most common solution to lens and CCD distortion correction is polynomial-fitting. In polynomial fitting, the vectors x=[1, 2, . . . C]T and y=[1, 2, . . . R]T are defined so that the following Vandermonde matrices can be definedX=[x0, x11, . . . , xn−1]  (1)Y=[y0, y11, . . . , yn−1].  (2)
The polynomial approximation may then be written as:Gaz≈YCazXT   (3)where the n×n matrix Caz of polynomial coefficients are given byCaz=(YTY)−1YTGazX(XTX)−1  (4)
Assuming n2 coefficients per gain mask, 2 bytes per coefficient and 3 color planes, it would take a total of 6AZn2 bytes to store all the polynomial coefficients. Assuming that the matrices X and Y can be precomputed, Equation 3 takes Cn(n+R) multiplies and C(n+R)(n−1) adds for a total of C(R+n)(2n−1) operations.
Polynomial fitting thus involves fitting a two-dimensional polynomial to the gain image and then storing the coefficients of the polynomial. Since there are usually 10 or so polynomial coefficients, only 10 numbers need to be stored for each zoom and aperture position. Additionally, since polynomials are generated using only multiplications and additions, gain masks can be efficiently computed and applied once the user captures an image.
Unfortunately, polynomials with an efficiently computable number of coefficients form a poor approximation to ideal gain masks. In short, polynomial fitting is a computationally efficient method of lens/CCD correction that involves a small amount of memory storage, but the overall correction ability is limited.
It would be desirable to have a gain correction method that may be implemented in a calibration and post-capture image processing algorithm that achieves a superior level of correction with minimal memory use.